﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using NUnit.Framework;
using CondominioG1.Persistencia.NHibernate;
using CondominioG1.Dominio;
using CondominioG1.Negocio;

using Spring.Context;
using Spring.Context.Support;

namespace CondominioG1.Pruebas.TestService
{
    [TestFixture]
    public class TestUsuarioService
    {

        private IApplicationContext Spring;

        [TestFixtureSetUp]
        public void InicializarPruebas()
        {
            Spring = new XmlApplicationContext(
                "assembly://CondominioG1/CondominioG1/capaPersistencia.xml",
                "assembly://CondominioG1/CondominioG1/capaNegocio.xml"
                );

            // Obtengo una referencia a la clase de negocio a probar
            UsuarioService usuarioService = (UsuarioService)Spring.GetObject("usuarioService");
            //Limpia la base de datos de residentes
            usuarioService.EliminarUsuarios();
            //Usuario para modificar y eliminar usados en las pruebas
            usuarioService.RegistrarUsuario("44491253", "Ivanoska", "Conde", "tastingo", "ADMIN");
            usuarioService.RegistrarUsuario("71255612", "Logan", "Castillo", "logan", "USER");
            usuarioService.RegistrarUsuario("40405050", "Silvia", "Delgado", "yurnero", "USER");
        }

        [Test]
        public void Test_RegistrarUsuario_correctamente()
        {
            UsuarioService UsuarioService = (UsuarioService)Spring.GetObject("usuarioService");
            Usuario UsuarioCreado = null;
            Assert.DoesNotThrow(delegate {
            UsuarioCreado = UsuarioService.RegistrarUsuario("12345678", "Carlos", "Castillo", "tastingo", "admin");
            });
            Assert.NotNull(UsuarioCreado);
        }

        [Test]
        public void Test_ModificarUsuario_correctamente()
        {
            UsuarioService UsuarioService = (UsuarioService)Spring.GetObject("usuarioService");
            Usuario UsuarioModificado = null;
            Assert.DoesNotThrow(delegate {
                UsuarioModificado = UsuarioService.ModificarUsuario("71255612", "Logan", "Castillo", "logan", "USER");
            });
            Assert.NotNull(UsuarioModificado);
        }

        [Test]
        public void Test_EliminarUsuario_correctamente()
        {
            UsuarioService UsuarioService = (UsuarioService)Spring.GetObject("usuarioService");
            Usuario UsuarioEliminado = null;
            Assert.DoesNotThrow(delegate {
                UsuarioEliminado = UsuarioService.EliminarUsuario("40405050");
            });
        }

        [Test]
        public void Test_RegistrarUsuario_incorrectamente()
        {
            UsuarioService UsuarioService = (UsuarioService)Spring.GetObject("usuarioService");
            Usuario usuarioCreado = null;
            // Pruebas solicitadas
            Assert.Catch<Exception>(delegate
            {
                usuarioCreado = UsuarioService.RegistrarUsuario("44491253", "Carlos", "Castillo", "tastingo", "admin");
            });
        }

    }
}
